package models

import (
	"errors"

	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
)

//检查用户是否已注册
//若用户已注册，error返回nil
//返回参数：
//0表示用户已注册
//1表示用户尚未注册
func CheckUsr(name string) (*User, int8) {
	var ORM = orm.NewOrm()
	qs := ORM.QueryTable("user")
	user := new(User)
	err := qs.Filter("name", name).One(user)
	if err != nil {
		return nil, 1
	}
	return user, 0

}

//注册用户
//状态说明：
//0：用户注册成功
//1：用户注册失败，用户名已存在
//2：用户注册失败，密码不得小于8位
//3:用户注册失败，系统故障
func Registered(name, password string) int8 {
	//检查用户是否已注册
	_, status := CheckUsr(name)
	if status == 0 {
		beego.Error(status)
		return 1
	}

	if len(password) < 8 {
		return 2
	}
	user := &User{
		Name:     name,
		Password: PasswordMD5(password),
	}
	o := orm.NewOrm()
	_, err := o.Insert(user)
	if err != nil {
		return 3
	}
	return 0
}

//登录操作
// 状态码表示如下
// 0：表示登陆成功
// 1：表示登录失败，密码错误
// 2：表示登录失败，用户不存在
// 3：登录失败，其他情况
func Login(name, password string) (int8, error) {
	// 使用md5加密
	pwd := PasswordMD5(password)
	o := orm.NewOrm()
	qs := o.QueryTable("user")
	user := new(User)
	err := qs.Filter("name", name).One(user)
	if err != nil {
		if user.Name == "" {

			return 2, errors.New("找不此用户")
		}
		return 3, err
	}

	if user.Password == pwd {
		return 0, nil
	} else {
		beego.Error("密码错误" + user.Password + " " + pwd)
		return 1, errors.New("密码错误")
	}
}
